package fr.bugtracker.commun.outils;

import org.springframework.security.authentication.AbstractAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContext;
import org.springframework.security.core.context.SecurityContextHolder;

import fr.bugtracker.entity.technique.Utilisateur;

/**
 * Classe utilitaire pour gérer la session de sécurité
 * @author Laurent
 * @version 0.1
 */
public abstract class UtilsAuthentication {

	/**
	 * Constructeur de la classe <code>UtilsAuthentication</code>.
	 */
	private UtilsAuthentication() {
	}

	/**
	 * Retourne l'utilisateur en session
	 * @return {@link Utilisateur}
	 */
	public static Utilisateur getUtilisateurSession() {
		Authentication vAuth = SecurityContextHolder.getContext().getAuthentication();
		if (vAuth != null) {
			if (vAuth.getDetails() instanceof Utilisateur) {
				return (Utilisateur) vAuth.getDetails();
			}
			if (vAuth.getPrincipal() instanceof Utilisateur) {
				return (Utilisateur) vAuth.getPrincipal();
			}
		}
		return null;
	}

	/**
	 * Retourne le contexte de sécurité
	 * @return {@link SecurityContext}
	 */
	public static SecurityContext getSecurityContext() {
		return SecurityContextHolder.getContext();
	}

	/**
	 * Modifie l'utilisateur en session
	 * @param pUtilisateur {@link Utilisateur}
	 */
	public static void updateUtilisateur(Utilisateur pUtilisateur) {
		Authentication vAuth = SecurityContextHolder.getContext().getAuthentication();
		if (vAuth != null) {
			((AbstractAuthenticationToken) vAuth).setDetails(pUtilisateur);
		}
	}
}
